複数のAWS LambdaにAmazon EFSやAmazon S3などの共有ストレージを設定するワークショップに参加してきた #AWSreInvent
はじめに
おのやんです。
今回ワークショップに参加して、Amazon S3とAmazon EFSに永続的なデータを持つサーバーレスAIアプリケーションを構築しました。
セッション概要
STG316 | Integrate serverless applications with AWS storage services
AWS Lambda is a serverless compute service that lets you run code without provisioning or managing servers. You can integrate it with Amazon EFS and Amazon S3 for data persistence, enabling increased application availability and regional resiliency. In this workshop, discover how to build your serverless AI applications with persistent data in Amazon S3 and Amazon EFS. Additionally, explore how the application can process data as its being retrieved from Amazon S3, transcribe content, and use Amazon Bedrock for summarization. Learn how to network your Lambda functions with regional storage services for external data access and how to share data between serverless functions. You must bring your laptop to participate.
サーバーレスアプリケーションとAWSストレージサービスの統合
AWS Lambdaは、サーバーのプロビジョニングや管理をせずにコードを実行できるサーバーレスコンピュートサービスです。 データ永続化のためにAmazon EFSやAmazon S3と統合することで、アプリケーションの可用性と地域耐障害性を高めることができます。 このワークショップでは、Amazon S3とAmazon EFSに永続的なデータを持つサーバーレスAIアプリケーションを構築する方法を発見してください。 さらに、アプリケーションがAmazon S3から取得されるデータを処理し、コンテンツを転記し、要約のためにAmazon Bedrockを使用する方法を探ります。 外部データアクセスのために、Lambdaファンクションを地域のストレージサービスとネットワーク化する方法と、サーバーレスファンクション間でデータを共有する方法を学びます。 参加にはノートパソコンの持参が必要です。
会場の様子
今回のワークショップは、MGN Grand3階の Premir 315会場で行われました。
今回も、スライドやスピーカーの声が一番聞こえる最前列の席に座って、ワークショップを受講しました。
セッション内容
今回のワークショップは、大まかにこれらのモジュールに分かれており、それぞれ順番に取り組んでいきました。
- lambda用のS3アクセスポイント・Lambdaレイヤー・Lambda関数用IAMロールの設定
- Lambda関数・API Gatewayの作成
- Lambda関数とEFSファイルシステム・S3バケットを連携
- EFSとS3を設定して、複数のLambdaを組み合わせてひとつの処理を実装
- EFSファイルシステム・S3バケットの監視方法を紹介
このうち最初2つと最後のモジュールは準備・参考内容程度にとどまっており、Lambda関数とEFS・S3を連携させる部分が本ワークショップのメインのように感じました。
今回のワークショップでは、こちらのように複数のLambda関数にS3やEFSなどのストレージサービスを設定して、各Lambda関数が正常に動作するようマネジメントコンソール上で構築を進めていきました。
今回扱ったLambda関数の役割は、大まかに以下の通りです。
- S3バケットに保存されているMP4ファイルをMP3の音声ファイルにFFMpegで変換
- MP3ファイルをAPI Gateway経由で配信
- S3バケットに保存されているMP4ファイルからOpenAI Whisperで音声を書き起こし
- 書き起こし文章を用いて、Claude 3 Haikuで文章要約
- MP4ファイルのアップロードをトリガーとして、スクリーンキャプチャを自動で取得
- スクリーンキャプチャをもとに、Hugging Faceのモデルを使用してオブジェクト検出を実施
処理の基本は、複数台のLambda関数になります。大きく見ると、この処理で得られた出力を共通のS3、EFSに保存して、このデータを別のLambdaで参照するという構成になっていました。
今回だと、MP4の音声を文字起こししたテキストファイルはEFSの方に保存されています。
一方で、MP4ファイルから取得されたスクリーンキャプチャはS3に保存されていました。S3のオブジェクト通知をlambdaに飛ばして、Lambda関数を発火させている構成でした。
EFS・S3のファイル共有方法が学べる
今回のセッションのメインテーマです。複数のLambda関数があり、これらが連携して動作するための共通ストレージとしてEFS・S3を設定しました。そのため、EFSのファイルマウントやS3のLambdaアクセスエンドポイント、LambdaへのS3オブジェクトイベント通知など、他のリソースにファイルを共有する方法を学べました。私個人としても、EFSはあまり触ったことがなかったので、非常に勉強になりました。
Lambdaで実装している処理内容が面白い
セッション自体は、Lambdaの共通ストレージとしてEFSやS3を設定する内容だったのですが、Lambdaで実装する処理自体が普通に面白かったです。ざっくり挙げても
- S3の保存したMP3ファイルをAPI Gateway経由で配信
- Claude 3 Haikuを用いた要約処理
- OpenAI Whisperを用いた文字越し
- Hugging Faceモデルを用いたS3上の画像ファイルの物体検出
となっており、機械学習・生成AIモリモリの内容となっていました。
処理自体は比較的シンプルな作りになっているので、ワークショップ自体もザクザク進めることができました。想定所要時間は2時間に設定されていましたが、1時間半で終えることができました。
実行時間は少し気になる
シンプルに尽くされている反面、Lambdaで機械学習系の処理を実行するため、どうしても実行時間は気になりました。Hugging Faceの物体検出をLambdaで実行した時は、処理が終わるまで5分くらいかかりました。LambdaでAI系の処理を実行するとなると、どうしてもコールドスタートなどの処理時間がネックになることが多い(ホテル同部屋の同僚曰く)ので、プロダクトレベルで作り込むとなる場合は、大幅なアーキテクチャの改善も必要になるかもしれません。
EFS・S3でサーバーレスアプリケーションの共有ストレージを作ろう
セッションタイトル通りの内容で非常に面白かったです。今回参加したワークショップの中ではダントツで面白かったと言えます。
こちらを執筆した段階で2日目ですが、これからもガンガンワークショップに参加していきたいと思います。では!